home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / decomp / usubr.c < prev   
Encoding:
C/C++ Source or Header  |  1985-05-01  |  2.9 KB  |  188 lines

  1. # include    <ingres.h>
  2. # include    <aux.h>
  3. # include    <tree.h>
  4. # include    <symbol.h>
  5. # include    <access.h>
  6. # include    <pv.h>
  7. # include    "globs.h"
  8. # include    <sccs.h>
  9.  
  10. SCCSID(@(#)usubr.c    8.1    12/31/84)
  11.  
  12.  
  13. /*
  14. **    usubr.c
  15. **
  16. **    utility routines to handle setting up params, etc for DBU calls
  17. */
  18.  
  19.  
  20.  
  21. /*
  22.  *    generate domain names, formats
  23.  */
  24. domnam(lnp, pre)
  25. QTREE    **lnp;
  26. char    *pre;
  27. {
  28.  
  29.     register char     suf, *n;
  30.     char        name[MAXNAME];
  31.     char        *getformat();
  32.     register QTREE    **p;
  33.  
  34.     suf = '1';
  35.     for (n=name; *n++= *pre++;);
  36.     *n = '\0';
  37.     n--;
  38.     for (p = lnp; *p != NULL; p++)
  39.     {
  40.         *n = suf++;
  41.         setp(PV_STR, name);
  42.         setp(PV_STR, getformat(*p));
  43.     }
  44. }
  45. /*
  46. **    gets format in ascii from RESDOM or AOP node
  47. */
  48. static char *
  49. getformat(p)
  50. QTREE    *p;
  51. {
  52.  
  53.     static char    buf[10];
  54.     register char    *b;
  55.  
  56.     b = buf;
  57.  
  58.     *b++ = p->sym.value.sym_op.opfrmt;
  59.     itoa(p->sym.value.sym_op.opfrml & I1MASK, b);
  60.     return(buf);
  61. }
  62. /*
  63. **    makes list of nodes (depth first)
  64. */
  65.  
  66. lnode(nod, lnodv, count)
  67. QTREE     *nod, *lnodv[];
  68. int    count;
  69. {
  70.     register QTREE    *q;
  71.     register int    i;
  72.  
  73.     i = count;
  74.     q = nod;
  75.  
  76.     if (q && q->sym.type != TREE)
  77.     {
  78.         i = lnode(q->left, lnodv, i);
  79.         lnodv[i++] = q;
  80.     }
  81.     return(i);
  82. }
  83. /*
  84. **    Immediately destroys the relation if it is an _SYS
  85. */
  86.  
  87. dstr_rel(relnum)
  88. int    relnum;
  89. {
  90.     initp();
  91.     if (dstr_mark(relnum))
  92.         call_dbu(mdDESTROY, FALSE);
  93.     else
  94.         resetp();
  95. }
  96. /*
  97. **    Put relation on list of relations to be
  98. **    destroyed. A call to initp() must be
  99. **    made before any calls to dstr_mark().
  100. **
  101. **    A call to call_dbu will actually have
  102. **    the relations exterminated
  103. **
  104. **    Trace Flags:
  105. **        65
  106. */
  107.  
  108. dstr_mark(relnum)
  109. int    relnum;
  110. {
  111.     register char    *p;
  112.     char        *rnum_convert();
  113.     bool        dstr_flag;
  114.  
  115.     dstr_flag = FALSE;
  116.     if (rnum_temp(relnum))
  117.     {
  118.         p = rnum_convert(relnum);
  119. #        ifdef xDTR1
  120.         if (tTf(65, 4))
  121.             printf("destroying %s\n", p);
  122. #        endif
  123.         setp(PV_STR, p);
  124.         specclose(relnum);    /* guarantee that relation is closed and descriptor destroyed */
  125.         rnum_remove(relnum);
  126.         dstr_flag = TRUE;    /* indicate that there are relations to be destroyed */
  127.     }
  128.     return(dstr_flag);
  129. }
  130. /*
  131. **    Make a temporary relation to match
  132. **    the target list of tree.
  133. **
  134. **    If rnum is positive, use it as the relation number,
  135. **    Otherwise allocate a new one.
  136. */
  137.  
  138. mak_t_rel(tree, prefix, rnum)
  139. QTREE    *tree;
  140. char    *prefix;
  141. int    rnum;
  142. {
  143.     QTREE        *lnodv[MAXDOM + 1];
  144.     register int    relnum;
  145.  
  146.     initp();
  147.     setp(PV_STR, "0");    /* initial relstat field */
  148.     relnum = rnum < 0 ? rnum_alloc() : rnum;
  149.     setp(PV_STR, rnum_convert(relnum));
  150.     lnodv[lnode(tree->left, lnodv, 0)] = NULL;
  151.     domnam(lnodv, prefix);
  152.  
  153.     call_dbu(mdCREATE, FALSE);
  154.     return (relnum);
  155. }
  156.  
  157.  
  158. QTREE **
  159. mksqlist(tree, var)
  160. QTREE    *tree;
  161. int    var;
  162. {
  163.     register QTREE    **sq;
  164.     register int    i;
  165.     static QTREE    *sqlist[MAXRANGE];
  166.  
  167.     sq = sqlist;
  168.     for (i = 0; i < MAXRANGE; i++)
  169.         *sq++ = 0;
  170.  
  171.     sqlist[var] = tree;
  172.     return (sqlist);
  173. }
  174.  
  175.  
  176.  
  177.  
  178. long
  179. rel_pages(tupcnt, width)
  180. long    tupcnt;
  181. int    width;
  182. {
  183.     register int    tups_p_page;
  184.  
  185.     tups_p_page = (PGSIZE - 12) / (width + 2);
  186.     return ((tupcnt + tups_p_page - 1) / tups_p_page);
  187. }
  188.